package br.unicamp.ic.lis.dbvapi.controller;

import java.util.List;

import br.unicamp.ic.lis.dbvapi.domain.DBV;
import br.unicamp.ic.lis.dbvapi.domain.LogicalVersion;
import br.unicamp.ic.lis.dbvapi.domain.MultiversionObject;
import br.unicamp.ic.lis.dbvapi.domain.Scale;
import br.unicamp.ic.lis.dbvapi.service.DBVService;
import br.unicamp.ic.lis.dbvapi.service.LogicalVersionService;
import br.unicamp.ic.lis.dbvapi.service.MultiversionObjectService;
import br.unicamp.ic.lis.dbvapi.service.PhysicalVersionService;
import br.unicamp.ic.lis.dbvapi.service.ScaleService;

public interface APIController {

	// multiversion objects and their physical versions
	void addMultiversionObject(MultiversionObject... o);

	// scale
	void addScale(Scale... scale);

	// Logical Versions
	void addLogicalVersion(LogicalVersion lv);

	void updateLogicalVersion(LogicalVersion lv);

	void removeLogicalVersion(LogicalVersion lv);

	List<LogicalVersion> getLogicalVersions(DBV dbv);

	// DBVs
	DBV createDBVFrom(String parentStamp, Scale scale);

	DBV createDBVFrom(DBV parentDBV);

	List<DBV> getScenario(String stamp);

	void close();

	// services
	MultiversionObjectService getMVOService();

	PhysicalVersionService getPVService();

	ScaleService getScaleService();

	DBVService getDBVService();

	LogicalVersionService getLVService();

	// void setCurrentscenario(List<DBV> dbvs);
	// load persisted scenarios
	// List<DBV> loadscenario(String stamp);
	// List<DBV> loadscenario(List<DBV> dbvs);
	// List<DBV> createDerivationTrees();
	// void commit();

}
